Conventional interleaver and deinterleaver approaches use simple surrounding logic and a memory unit. Such approaches are useful for short codewords with a short depth. For example, a N*D memory matrix is used where N is an integer representing the length of the codeword while D is an integer representing the depth of the interleaver. This is a common method used in many conventional data storage and communication systems.
However, such conventional implementations of interleavers and deinterleavers do not optimize memory usage. When the codeword is long and depth is large (which can occur in some special cases), the unoptimized memory usage can be a problem for the design of an application specific integrated circuit (ASIC). Even with a software only implementation, unoptimized memory usage is a problem when both the length and depth are large.
It would be desirable to implement an interleaver and/or deinterleaver in a broadband environment (e.g., ADSL) that optimizes memory usage, particularly when the length and depth of the codeword are large.